package com.zzl.scala

/**
  * 1.object 修饰的代码块中 定义的一切的属性都是静态的,只需要通过类名就能调用
  * main肯定是在object修饰的代码块中定义的
  * 2. if else if elseif else
  * 3. for循环
  *   单程for循环
  *   双层for循环
  *   带有判断语句的for循环
  *   yied关键词 可以将符合条件的元素添加到一个集合中
  *   val list = for(i<- 1=10;if i%2 ==0) yield i
  *   小九九 九九乘法表
  * 4.while:先判断后执行循环体中的语句   do while:先执行循环体中的语句 后判断
  * 5.函数:
  *   如何定义一个函数
  *     def dun(name:String):Int ={
  *         //函数体 如果需要返回值,那么可以使用return关键词
  *         //当然return关键词就可以省略,默认最后一行语句的执行就是这个函数的返回值
  *      }
  *      (1)带有默认值的函数
  *      def fun1(param1:String="Angelababy",param2:Int,param3:Double){
  *         如何调用?
  *         fun1("Dilireba",100,19.9)
  *      }
  *      (2)可变参数的函数
  *      def fun2(scores:Double*){
  *         fun2(10.0,12.0,13.2)
  *      }
  *      (3)嵌套函数:在函数中又定义了一个函数
  *      (4)递归函数:在函数体中又调用了本身这个函数
  *      (5)高阶函数:
  *           函数的参数或者返回时一个函数
  *           def fun3(f(Int,Int)=>Int):Int ={}
  *           简写原则:匿名函数中的参数在方法体只出现一次,那么可以用_来代替
  *           fun3(_+_)
  *      (6)柯里化函数
  *
  */


object Lesson02 {
  def main(args: Array[String]): Unit = {
    var a = new Lesson01()
    a.aa
    for( i <- 1 to 9;j<- 1 to i){
      print(j+"*"+i+"="+i*j+"\t")
      if(i==j){
        println()
      }
    }
    println()
   // multiTable3
  }
  def multiTable3 = {
    (
      for (
        i <- 1 to 9;
        j <- 1 to i;
        ss = s"$j*$i=${i * j}\t"
      ) yield {
        if (j == i) s"$ss\n" else ss
      }).foreach(print);
  }


  def fun1(a:Int)(b:Int)={
    a+b
  }

  println(fun1(1)(2))

  def fun2(param1:Int):(Int)=>Int={
    def fun3(param2:Int):Int ={
      param2+param1
    }
    fun3
  }
}
